home *** CD-ROM | disk | FTP | other *** search
/ SunSoft Catalyst CDWARE 1996 May to August / Catalyst CDWARE 1996 May to August.iso / .products / RogueWave / Wave.java < prev   
Text File  |  1996-01-31  |  3KB  |  133 lines

  1. /*   
  2.  * Wave.java  -- Modified version of Sun's TumblingDuke example.
  3.  */                     
  4.  
  5. import java.io.InputStream;
  6. import java.applet.Applet;
  7. import java.awt.*;
  8. import java.net.*;
  9.  
  10. /**
  11.  * A simple Item class to play an image loop.  The "img" tag parameter
  12.  * indicates what image loop to play.
  13.  *
  14.  * @author     James Gosling
  15.  * @version     1.17, 31 Jan 1995
  16.  */
  17. public
  18. class Wave extends Applet implements Runnable {
  19.     /**
  20.      * The current loop slot.
  21.      */
  22.     int loopslot = 0;
  23.  
  24.     /**
  25.      * The directory or URL from which the images are loaded
  26.      */
  27.     String dir;
  28.  
  29.     /**
  30.      * The thread animating the images.
  31.      */
  32.     Thread kicker = null;
  33.  
  34.     /**
  35.      * The length of the pause between revs.
  36.      */
  37.     int pause;
  38.  
  39.     int offset;
  40.     int off;
  41.     int speed;
  42.     int nimgs;
  43.  
  44.     /**
  45.      * The images.
  46.      */
  47.     Image imgs[];
  48.     int maxWidth;
  49.  
  50.     /**
  51.      * Initialize the applet. Get attributes.
  52.      */
  53.     public void init() {
  54.     String at = getParameter("img");
  55.         dir = (at != null) ? at : "images/wave";
  56.     at = getParameter("pause");
  57.         pause = (at != null) ? Integer.valueOf(at).intValue() : 100;
  58.     at = getParameter("speed");
  59.     speed = (at != null) ? (1000 / Integer.valueOf(at).intValue()) : 100;
  60.     at = getParameter("nimgs");
  61.     nimgs = (at != null) ? Integer.valueOf(at).intValue() : 16;
  62.     at = getParameter("maxwidth");
  63.     maxWidth = (at != null) ? Integer.valueOf(at).intValue() : 0;
  64.     }
  65.  
  66.     /**
  67.      * Run the image loop. This methods is called by class Thread.
  68.      * @see java.lang.Thread
  69.      */
  70.     public void run() {
  71.     Thread.currentThread().setPriority(Thread.NORM_PRIORITY-1);
  72.     imgs = new Image[nimgs];
  73.     for (int i = 1; i < nimgs; i++) {
  74.             imgs[i] = getImage(getDocumentBase(), dir + "/wave" + i + ".gif");
  75.     }
  76.  
  77.     if (nimgs > 1) {
  78.         while (kicker != null) {
  79.         //System.out.println("frame = " +  loopslot);
  80.         if (++loopslot >= nimgs) {
  81.             loopslot = 0;
  82.         }
  83.         repaint();
  84.         try {
  85.             Thread.sleep(speed + ((loopslot == nimgs - 1) ? pause : 0));
  86.         } catch (InterruptedException e) {
  87.             break;
  88.         }
  89.         }
  90.     }
  91.     }
  92.  
  93.     public boolean imageUpdate(Image img, int flags,
  94.                    int x, int y, int w, int h) {
  95.     if ((flags & (SOMEBITS|FRAMEBITS|ALLBITS)) != 0) {
  96.         if ((imgs != null) && (loopslot < nimgs) && (imgs[loopslot] == img)) {
  97.         repaint(100);
  98.         }
  99.     }
  100.     return (flags & (ALLBITS|ERROR)) == 0;
  101.     }
  102.  
  103.     /**
  104.      * Paint the current frame.
  105.      */
  106.     public void paint(Graphics g) {
  107.     //System.out.println("paint");
  108.     if ((imgs != null) && (loopslot < nimgs) && (imgs[loopslot] != null)) {
  109.         g.drawImage(imgs[loopslot], 0, 0, this);
  110.     }
  111.     }
  112.  
  113.     /**
  114.      * Start the applet by forking an animation thread.
  115.      */
  116.     public void start() {
  117.     if (kicker == null) {
  118.         kicker = new Thread(this);
  119.         kicker.start();
  120.     }
  121.     }
  122.  
  123.     /**
  124.      * Stop the applet. The thread will exit because kicker is set to null.
  125.      */
  126.     public void stop() {
  127.     if (kicker != null) {
  128.         kicker.stop();
  129.         kicker = null;
  130.     }
  131.     }
  132. }
  133.